package lx;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

/*需求：
         一个文件里面存储了班级同学的姓名，每一个姓名占一行。
         要求通过程序实现随机点名器。
       运行结果要求：
         被点到的学生不会再被点到。
         但是如果班级中所有的学生都点完了， 需要重新开启第二轮点名。
       核心思想：
            点一个删一个，把删除的备份，全部点完时还原数据。

     */
public class demo8 {
    public static void main(String[] args) throws IOException {
        //1.定义变量，表示初始文件路径，文件中存储所有的学生信息
            String src = "allnames.txt";
            //2.定义变量，表示备份文件，一开始文件为空
        String copy = "copy.txt";
        //3.读取初始文件中的数据，并把学生信息添加到集合当中
        ArrayList<String> list = readFile(src);
        //4.判断集合中是否有数据
        if (list.size() == 0) {
            //5.如果没有数据了，表示所有的学生点完了，从copy.txt中把数据给allnames.txt即可
            //传给allnames.txt如下
            //5.1 读取copy.txt中的所有数据
            list = readFile(copy);
            //5.2 把读出来的数据写入allnames.txt（初始化文本当中）
            writeFile(list, src, false);
            //5.3 清空 copy文件中的数据
            FileWriter fw = new FileWriter(copy);
            fw.write(" ");
            fw.close();


        }
        //5.集合中有数据，表示还没有点完，随机一个删一个，把删除的备份到copy.txt当中
        //打乱集合
        Collections.shuffle(list);
        //获取0索引的学生信息并删除
        String stuInfo = list.remove(0);
        //打印随机到的学生信息
        System.out.println("当前被点到的学生为：" + stuInfo);
        //把随机出来的学生信息（除了被删除的，把list集合中的数据全部）写入allnames.txt当中

        //此时的list集合的数据随一个少一个
        System.out.println("还剩下" + list.size() + "个学生");

        //刷新allnames.txt中的学生信息
        writeFile(list, src, false);
        //把删除的学生写到copy.txt文件当中，追加写入，随一个写一个
        writeFile(stuInfo, copy, true);
    }

    private static void writeFile(String stuInfo, String copy, boolean b) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter(copy, b));
        bw.write(stuInfo);
        bw.newLine();
        bw.close();
    }

    //定义方法，把所有学生信息写入到文初始化文件（allnames.txt)中
    private static void writeFile(ArrayList<String> list, String src, boolean b) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter(src, b));
        //list这个集合存储了copy.txt的数据，也就是所有学生信息
        for (String s : list) {
            bw.write(s);
            bw.newLine();
        }
        bw.close();
    }

    //定义方法，把读取出来的学生信息添加到集合当中
    private static ArrayList<String> readFile(String src) throws IOException {
        //创建一个字符流
        BufferedReader br = new BufferedReader(new FileReader(src));
        //创建一个集合存储读到数据
        ArrayList<String> list = new ArrayList<>();
        String line;
        while ((line = br.readLine()) != null) {
            list.add(line);

        }
        return list;

    }
}
